package com.sz.biz.logistics.base.service;

import com.sz.biz.logistics.base.entity.Region;
import com.sz.biz.logistics.base.dto.RegionDto;
import com.sz.biz.logistics.base.entity.RegionItem;
import com.sz.common.base.dto.QResultDto;
import com.sz.common.base.dto.QueryParams;

import java.text.ParseException;
import java.util.Date;
import java.util.List;

/**
 * Function: 分区service <br>
 * Author: hpeng.wang <br>
 * Date: 2017-02-15 14:58:00
 */

public interface RegionService {
    /**
     * 新增
     *
     * @param entry 新增的实体
     * @return 新增是否成功
     */
    int save(RegionDto entry) throws ParseException;

    /**
     * 根据主键id删除实体
     *
     * @param id 主键id
     */
    void delete(Integer id);

    /**
     * 根据id集合删除实体
     *
     * @param ids 集合
     */
    void batchDelete(List<Integer> ids);

    /**
     * 根据分区方案的uid集合删除实体
     *
     * @param schemaUids 分区方案uid集合
     */
    void deleteBySchemaIds(List<String> schemaUids);

    /**
     * 更新实体
     *
     * @param entry 更新的实体
     * @return 新增是否成功
     */
    int update(Integer id, RegionDto entry);


    /**
     * 根据主键Id查询单个实体
     *
     * @param id 主键id
     * @return 查询出来的实体对象
     */
    Region findById(Integer id);

    /**
     * 根据id集合查询实体
     *
     * @param ids
     * @return
     */
    List<Region> findByIds(List<Integer> ids);

    /**
     * 根据主键id，查询相应的分区信息，包括详情
     *
     * @param id 　主键id
     * @return　返回分区的dto对象信息
     */
    RegionDto findDtoById(Integer id);

    /**
     * 根据外键schemaUid查询分区表中方案id对应的所有分区集合
     *
     * @param schemaUid schemaUid
     * @return 查询出来的分区的集合
     */
    List<RegionDto> findDtoBySchemaUid(String schemaUid);
    List<RegionItem> findItemBySchemaUid(String schemaUid);

    /**
     * 根据外键schemaId查询分区表中方案对应的所有分区的id集合
     *
     * @param schemaUid schemaUid
     * @return 查询出来的分区id集合
     */
    List<Integer> findIdBySchemaUid(String schemaUid);

    /**
     * 根据方案uid集合与激活状态查询分区数据集合
     *
     * @param schemaUids 分区方案的uid
     * @param isActive   分区的激活状态 如果为NULL代表忽略此字段，true：查询当前激活 false：查询失效的
     * @return 查询的分区数据集合
     */
    List<Region> findRegionBySchemaUids(List<String> schemaUids, Boolean isActive, Date time);

    /**
     * 根据条件查询相应的分区信息
     *
     * @param uids     分区的uid
     * @param isActive 分区激活的状态 true 激活 false 未激活 null 不需要这个条件
     * @param time     时间点
     * @return 查询的分区信息 与区item
     */
    List<Region> findRegion(List<String> uids, Boolean isActive, Date time);

    /**
     * 根据条件查询实体
     *
     * @param params 查询的参数集
     * @return 查询出的数据
     */
    QResultDto findByParam(QueryParams params);

    List<Region> findByParam(String schemaId, String query);

    /**
     * 根据分区uid查询分区中当前为激活状态的信息
     *
     * @param uid 分区的uid
     * @return 查询出的激活的分区及item信息
     */
    Region findActivedByUid(String uid);
    List<Integer> findIdBySchemaUids(List<String> schemaUids, Boolean isActive);

    /**
     * 根据分区的uid与时间点查询相应的分区信息
     *
     * @param uid  分区的uid信息
     * @param time 时间点信息
     * @return 查询出的分区与item信息
     */
    Region findByUidAndTime(String uid, Date time);

    /**
     * 校验code是否存在
     *
     * @param id
     * @param schemaUid
     * @param code
     */
    void checkCode(int id, String schemaUid, String code);

}
